package model

import (
	"time"
)

// IVRActionType IVR动作类型
type IVRActionType string

const (
	IVRActionPlay      IVRActionType = "play"      // 播放语音
	IVRActionMenu      IVRActionType = "menu"      // 菜单选择
	IVRActionTransfer  IVRActionType = "transfer"  // 转接
	IVRActionHangup    IVRActionType = "hangup"    // 挂断
	IVRActionRecord    IVRActionType = "record"    // 录音
	IVRActionValidate  IVRActionType = "validate"  // 验证
	IVRActionSetVar    IVRActionType = "set_var"   // 设置变量
	IVRActionAPI       IVRActionType = "api"       // 调用API
	IVRActionWait      IVRActionType = "wait"      // 等待
	IVRActionGoto      IVRActionType = "goto"      // 跳转
)


// IVRMenuOption IVR菜单选项
type IVRMenuOption struct {
	Key     string `json:"key"`     // 按键
	Action  string `json:"action"`  // 动作类型
	Target  string `json:"target"`  // 目标节点ID或转接号码
	Prompt  string `json:"prompt"`  // 提示文本
	Timeout int    `json:"timeout"` // 超时时间(秒)
}

// IVRAction IVR动作配置
type IVRAction struct {
	Type       IVRActionType       `json:"type"`
	Params     map[string]string   `json:"params"`     // 动作参数
	MenuOptions []IVRMenuOption    `json:"menu_options,omitempty"` // 菜单选项
	NextNode   string              `json:"next_node,omitempty"`   // 下一个节点
}

// IVRNode IVR节点
type IVRNode struct {
	ID        string      `json:"id"`        // 节点ID
	Name      string      `json:"name"`      // 节点名称
	Action    IVRAction   `json:"action"`    // 节点动作
	Condition string      `json:"condition,omitempty"` // 条件表达式
}

// IVRFlow IVR流程定义
type IVRFlow struct {
	ID          string    `json:"id"`          // 流程ID
	Name        string    `json:"name"`        // 流程名称
	Description string    `json:"description"` // 流程描述
	EntryNodeID string    `json:"entry_node"`  // 入口节点ID
	Nodes       []IVRNode `json:"nodes"`       // 所有节点
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// IVRSession IVR会话
type IVRSession struct {
	ID          string                 `json:"id"`
	FlowID      string                 `json:"flow_id"`
	CallUUID    string                 `json:"call_uuid"`
	CallerID    string                 `json:"caller_id"`
	CurrentNode string                 `json:"current_node"`
	Variables   map[string]string      `json:"variables"`     // 会话变量
	History     []IVRSessionHistory    `json:"history"`       // 会话历史
	CreatedAt   time.Time              `json:"created_at"`
	UpdatedAt   time.Time              `json:"updated_at"`
}

// IVRSessionHistory IVR会话历史
type IVRSessionHistory struct {
	NodeID      string    `json:"node_id"`
	Action      string    `json:"action"`
	Input       string    `json:"input"`      // 用户输入
	Timestamp   time.Time `json:"timestamp"`
}

// IVRPrompt IVR语音提示
type IVRPrompt struct {
	ID          string    `json:"id"`
	Name        string    `json:"name"`
	Description string    `json:"description"`
	FilePath    string    `json:"file_path"`    // 语音文件路径
	ContentType string    `json:"content_type"` // 内容类型 (audio/wav, audio/mp3等)
	Text        string    `json:"text,omitempty"` // 文本内容(用于TTS)
	Language    string    `json:"language"`     // 语言
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}